package com.kamistoat.meimeimall.meimeimallproduct.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.kamistoat.meimeimall.common.utils.PageUtils;
import com.kamistoat.meimeimall.meimeimallproduct.entity.CategoryEntity;
import com.kamistoat.meimeimall.meimeimallproduct.vo.thymeleaf.Catalog2Vo;

import java.util.List;
import java.util.Map;

/**
 * 商品三级分类
 *
 * @author kamistoat
 * @email linjianshanke@163.com
 * @date 2021-09-12 14:28:44
 */
public interface CategoryService extends IService<CategoryEntity> {

    PageUtils queryPage(Map<String, Object> params);

    /**
     * 带缓查询所有商品分类，构造成树形结构后返回。
     */
    List<CategoryEntity> listWithTree();

    /**
     * 我们自己编写的方法
     * 在一定的逻辑条件下，对菜单进行删除
     *
     * @param asList 传入的菜单id列表
     */
    void removeMenuByIds(List<Long> asList);

    /**
     * 我们自己编写的方法
     * 根据传入的菜单id，寻找其全部父菜单id，制作成一个long[]返回
     * @param catelogId 某个底层菜单Id
     * @return long[]全部父菜单Id+自身Id
     */
    Long[] findCatelogPath(Long catelogId);

    /**
     * 我们自己编写的方法
     * 一并更新所有冗余存储的数据表
     * @param category 传来的Entity
     */
    void updateDetail(CategoryEntity category);

    /**
     * 带缓查询所有一级菜单
     * @return 列表
     */
    List<CategoryEntity> getTopCategorys();

    /**
     * 带缓查询所有二级和三级菜单
     */
    Map<String, List<Catalog2Vo>> getSecondCategorys();

    /**
     * 获取指定 categoryId 的级别
     */
    int getCategoryLevel(Long categoryId);
}

